﻿using System;
using System.Collections.Generic;
using System.Text;

using YouHP.Model;

namespace YouHP.IDAL
{
    public interface IPatient
    {
        #region 病人疾病纪录
        /* 根据用户取得其疾病信息*/
        PatientRecordInfo GetPatientRecordByUserId(int userId);

        PatientRecordInfo GetPatientRecordById(int id);

        /*添加疾病纪录信息*/
        bool AddDiseaseRecorde(PatientRecordInfo pdInfo);

        /*修改疾病纪录的某些信息*/
        bool UpdateDiseaseRecorde(PatientRecordInfo pdInfo);

        bool UpdatePatientRecord_GraphGeneralPath(PatientRecordInfo info);
        bool UpdatePatientRecord_GraphLabcheckPath(PatientRecordInfo info);
        bool UpdatePatientRecord_GraphSymptomPath(PatientRecordInfo info);
        bool UpdatePatientRecord_GraphTreatmentPath(PatientRecordInfo info);

        #endregion

        #region 病人症状记录  （废弃的）
        /*批量添加某天症状信息*/
        bool AddSymptomRecordes(SymptomRecordesInfo[] psInfos);

        /* 添加一条症状记录 */
        bool AddSymptomRecordes(SymptomRecordesInfo psInfos);

        /*批量修改某天症状信息*/
        bool UpdateSymptomRecordes(SymptomRecordesInfo[] ptInfos);

        /*更新一条症状记录*/
        bool UpdateSymptomRecordes(SymptomRecordesInfo ptInfos);

        /*删除症状记录*/
        bool DelSymptomRecordes(int prid,int[] itemIds);
       
        /*根据病人疾病id以及当天日期获取已经填写的症状信息*/
        /*prId表示病人疾病纪录id*/
        List<SymptomRecordesInfo> GetSymptomRecordesList(int pageSize,int pageIndex,int prId, DateTime date); 

        /* 根据id取得某天的症状信息 */
        SymptomRecordesInfo GetSymptomRecordes(int id,int prid);
        #endregion

        #region 实验室指标

        // 添加一条实验室指标记录
        bool AddLabcheckRecordes(LabcheckRecordesInfo psInfos);

        // 删除实验室指标记录
        bool DelLabcheckRecordes(int[] idLst,int prid);

        // 更新一条实验室指标记录
        bool UpdateLabcheckRecordes(LabcheckRecordesInfo ptInfos);

        // 根据id取得实验室指标记录
        LabcheckRecordesInfo GetLabcheckRecordes(int id, int prid);

        // 根据病人疾病id获取实验室指标记录
        List<LabcheckRecordesInfo> GetLabcheckRecordesList(int pageSize, int pageIndex, int prId,out int count);

        #endregion

        #region 病人治疗信息查询以及添加修改
        /*获取病人针对某种疾病当前使用的治疗列表（包括以前使用后中间停用，然后当前又开始使用的治疗）*/
        List<PatientTreatmentInfo> GetCurUsedTreatments(int pageSize, int pageIndex, int prId, out int count);  /*prId表示病人疾病纪录id*/

        /*获取病人针对某种疾病当前没有使用的治疗列表*/
        List<PatientTreatmentInfo> GetCurNoUsedTreatments(int pageSize, int pageIndex, int prId, out int count);  /*prId表示病人疾病纪录id*/

        /*获取病人针对某种疾病使用某种治疗的所有历史纪录*/
        List<PatientTreatmentInfo> GetUseHistoryTreatments(int pageSize, int pageIndex, int prId, int tId, out int count);  /*prId表示病人疾病纪录id*/

        /*添加治疗信息*/
        bool AddTreatmentRecorde(PatientTreatmentInfo ptInfo);

        /*修改治疗信息*/
        bool UpdateTreatmentRecorde(PatientTreatmentInfo ptInfo);

        /*停止治疗信息*/
        bool StopTreatmentRecorde(PatientTreatmentInfo ptInfo);

        /*改变剂量*/
        bool ChangeTreatmentDosage(PatientTreatmentInfo ptInfo);

        /*根据治疗的历史纪录id来获取详细信息*/
        PatientTreatmentInfo GetPatientTreatmentById(int trId);

        /*批量删除治疗信息*/
        bool DelTreatmentRecordes(int[] trIds);
        #endregion

        #region 治疗
        /*
        bool AddPatientTreatment(PatientTreatmentInfo info);

        bool DelPatientTreatment(int id, int prid);

        bool UpdatePatientTreatment(PatientTreatmentInfo info);

        PatientTreatmentInfo GetPatientTreatmentByTreatment(int prid, int treatmentId);

        List<PatientTreatmentInfo> GetPatientTreatmentList(int pageSize, int pageIndex, int prid, out int count);

        List<PatientTreatmentInfo> GetUsingPatientTreatmentList(int pageSize, int pageIndex, int prid, out int count);

        List<PatientTreatmentInfo> GetStoppedPatientTreatmentList(int pageSize, int pageIndex, int prid, out int count);

        bool AddTreatmentHistory(TreatmentHistoryInfo info,out int treatmentHistoryId);

        bool DelTreatmentHistory(int id, int prid);

        bool UpdateTreatmentHistory(TreatmentHistoryInfo info);

        TreatmentHistoryInfo GetTreatmentHistory(int id, int prid);

        List<TreatmentHistoryInfo> GetTreatmentHistoryList(int pageSize, int pageIndex, int prid, int treatmentId, out int count);

        bool AddTreatmentAction(TreatmentActionInfo info);

        bool DelTreatmentAction(int acid,int prid);

        bool UpdateTreatmentAction(TreatmentActionInfo info);

        TreatmentActionInfo GetTreatmentAction(int acid, int prid);

        List<TreatmentActionInfo> GetTreatmentActionList(int pageSize, int pageIndex, int patientRecordId, int treatmentHistoryId, out int count);
        */
        #endregion

        #region 病人检索
        /*根据病人内部条件如：用户名、年龄、地域等来检索病人，并返回用户列表以及总记录数*/
        List<UserInfo> GetLatestPatientList(int pageSize, int pageIndex, string condStr, string orderStr, out int count);

        /*根据病人内部条件如：用户名、年龄、地域等来检索病人，并返回用户列表以及总记录数*/
        List<UserInfo> GetPatientList(int pageSize, int pageIndex, string condStr, string orderStr, out int count);

        /*根据病人内部条件如：用户名、年龄、地域等来检索病人，并返回用户列表以及总记录数*/
        /* 此函数返回所有的用户信息，即使用户没有指定所患的疾病 */
        List<UserInfo> GetAllPatientsList(int pageSize, int pageIndex, string condStr, string orderStr, out int count);

        /*根据疾病信息来检索病人，返回病人列表以及总记录数*/
        List<UserInfo> GetPatientListByDisease(int pageSize, int pageIndex, string condStr, string orderStr, out int count);

        /*根据治疗信息来检索病人，返回病人列表以及总记录数*/
        List<UserInfo> GetPatientListByTreatment(int pageSize, int pageIndex, string condStr, string orderStr, int isQueryCurrent, out int count);

        /*根据症状信息来检索病人，返回病人列表以及总记录数*/
        List<UserInfo> GetPatientListBySymptom(int pageSize, int pageIndex, string condStr, string orderStr, int isQueryCurrent, out int count);

        /*使用高级搜索来检索病人(多表联合)，返回病人列表以及总记录数*/
        List<UserInfo> GetPatientListByAdvanceSearch(int pageSize, int pageIndex, string condStr, string orderStr, int isQueryCurrent, out int count);
        #endregion

        #region 病人Survey   
        bool CheckPatientSurvey(int prId, int surveyType, DateTime surveyDate);
        #endregion
    }
}
